package com.lwc.backendsinglestructure.queue;

import cn.hutool.json.JSONUtil;
import com.lwc.backendsinglestructure.queue.consumer.AbstractRedisQueueConsumer;
import com.lwc.backendsinglestructure.queue.enums.MessageQueueEnum;
import com.lwc.backendsinglestructure.queue.model.SyncSearchEngineListDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 公众号推文consumer
 */
@Component
//@Lazy(value = false)
@Slf4j
public class ArticleSyncRedisQueueConsumer extends AbstractRedisQueueConsumer<SyncSearchEngineListDTO> {

    /**
     * 设置最大并发消费数量 5次
     * @return
     */
    @Override
    protected int getPoolSize() {
        return 5;
    }

    /**
     * 实体转换
     * @param data
     * @return
     */
    @Override
    protected SyncSearchEngineListDTO convert(String data) {
        return JSONUtil.toBean(data, SyncSearchEngineListDTO.class);
    }

    /**
     * 数据处理
     * @param data
     */
    @Override
    protected void receive(SyncSearchEngineListDTO data) {
        log.info("数据处理");
    }

    /**
     * 设置重试次数 3次
     * @return
     */
    @Override
    protected int retryTimes() {
        return 3;
    }

    /**
     * 指定队列名称
     * @return
     */
    @Override
    protected MessageQueueEnum getMessageQueue() {
        return MessageQueueEnum.ARTICLE_MESSAGE_QUEUE;
    }

    /**
     * 最终错误告警
     * @param data
     * @param ex
     */
    @Override
    protected void error(SyncSearchEngineListDTO data, Exception ex) {
        log.error("错误告警");
        // TODO 可以插入一张表里面
    }

    /**
     * 设置最大重新入队次数 3次
     * @return
     */
    @Override
    protected int getBackToQueueTime() {
        return 3;
    }
}
